package com.ruoyi.web.controller.tool;

import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * 图片清理任务 - 立即执行接口
 * 说明：
 * 1) 通过 @Anonymous 注解放行安全拦截，可用于外部回调/运维触发。
 * 2) 优先按 Quartz 的 jobName/jobGroup 触发；若未配置 Quartz，可尝试直接调用清理 Service（可选）。
 */
@RestController
@RequestMapping("/tool/image")
public class ImageCleanController extends BaseController {

    @Autowired(required = false)
    private Scheduler scheduler;

    @Autowired
    private ApplicationContext applicationContext;

    /**
     * 立即触发图片清理 Quartz 任务
     * 示例：POST /tool/image/cleanNow?name=imageClean&group=DEFAULT
     */
    @Anonymous
    @PostMapping("/cleanNow")
    public AjaxResult cleanNow(
            @RequestParam(value = "name", defaultValue = "imageClean") String jobName,
            @RequestParam(value = "group", defaultValue = "DEFAULT") String jobGroup) {
        try {
            if (scheduler == null) {
                return AjaxResult.error("Quartz Scheduler 未注入，无法触发任务");
            }
            JobKey jobKey = new JobKey(jobName, jobGroup);
            if (!scheduler.checkExists(jobKey)) {
                return AjaxResult.error("未找到定时任务: " + jobGroup + "." + jobName);
            }
            scheduler.triggerJob(jobKey);
            return AjaxResult.success("已触发执行: " + jobGroup + "." + jobName);
        } catch (SchedulerException e) {
            return AjaxResult.error("触发失败: " + e.getMessage());
        }
    }

    /**
     *（可选）直接调用清理 Service 的方法（当未使用 Quartz 时）
     * 要求存在名为 imageCleanService 的 Bean，且包含 public void clean() 方法。
     */
    @Anonymous
    @PostMapping("/cleanDirect")
    public AjaxResult cleanDirect() {
        try {
            // 尝试获取 imageCleanService Bean
            Object bean = applicationContext.getBean("imageCleanupTask");
            // 调用 clean() 方法
            bean.getClass().getMethod("clean").invoke(bean);
            return AjaxResult.success("图片清理已直接执行");
        } catch (NoSuchBeanDefinitionException e) {
            return AjaxResult.error("未找到 imageCleanService Bean，请确保 ImageCleanupTask 已正确配置");
        } catch (Exception e) {
            return AjaxResult.error("执行失败: " + e.getMessage());
        }
    }
}


